﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
    public class ContrachequeRepositorioADO
    {
        private Contexto contexto;

        public IEnumerable<Contracheque> ListarContracheque(string cpf,int ano,string mes)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("select folha Descricao,tipoFolha TipoFolha,mes Mes,ano Ano,total_vant,total_desc,"+
                    "val_liq,salarioBase,FGTSDesc,baseFGTS,baseIRRF,folha,null Nome,null CPF,null CargaHo,null ctps_serie,"+
                "null DtAdm ,null IdCargo,null Setor,null Matricula,null Pis,null Rg,null Cbo from Contra_Cheque" +
                                            " where cpffunc='{0}' and ano={1} and mes={2} order by tipoFolha", cpf, ano, mes);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        public Contracheque ListarContrachequeFunc(string cpf, int ano, string mes, int tipoFolha) 
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("select * from View_Contracheque " +
                                            " where CPF='{0}' and Ano={1} and Mes={2} and TipoFolha={3} order by TipoFolha", cpf, ano, mes, tipoFolha); 
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public void InserirContracheque(Contracheque cc)
        {
            var strQuery = "";

            string Total_vant_= cc.Total_vant.ToString().Replace(",",".");
            string Total_desc_ = cc.Total_desc.ToString().Replace(",", ".");
            string Val_liq_ = cc.Val_liq.ToString().Replace(",", ".");
            string Salariobase_ = cc.Salariobase.ToString().Replace(",", ".");
            string FGTSDesc_ = cc.FGTSDesc.ToString().Replace(",", ".");
            string BaseFGTS_ = cc.BaseFGTS.ToString().Replace(",", ".");
            string BaseIRRF_ = cc.BaseIRRF.ToString().Replace(",", ".");

            strQuery += " insert into dbo.Contra_Cheque (cpffunc,ano,mes,total_vant,total_desc,val_liq,salarioBase," +
                            "FGTSDesc,baseFGTS,baseIRRF,folha,tipoFolha)";
            strQuery += string.Format(" values ('{0}',{1},{2},{3},{4},{5},{6},{7},{8},{9},'{10}',{11})",
                cc.CPF,cc.Ano,cc.Mes,Total_vant_,Total_desc_,Val_liq_,Salariobase_,FGTSDesc_,BaseFGTS_,BaseIRRF_,cc.Descricao,cc.TipoFolha);

            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        
        private List<Contracheque> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {
            var cc = new List<Contracheque>();
            while (reader.Read())
            {
                CREAPA.Dominio.Pessoa pessoa = new CREAPA.Dominio.Pessoa();
                CREAPA.Dominio.Funcionario func = new CREAPA.Dominio.Funcionario();
                var TemObjeto = new Contracheque()
                {
                    TipoFolha = int.Parse(reader["TipoFolha"].ToString()),
                    Descricao = reader["Descricao"].ToString(),
                    Mes = reader["Mes"].ToString(),
                    Ano = int.Parse(reader["Ano"].ToString()),

                    Total_vant = float.Parse(reader["Total_vant"].ToString()),
                    Total_desc = float.Parse(reader["Total_desc"].ToString()),
                    Val_liq = float.Parse(reader["Val_liq"].ToString()),
                    Salariobase = float.Parse(reader["Salariobase"].ToString()),
                    FGTSDesc = float.Parse(reader["FGTSDesc"].ToString()),
                    BaseFGTS = float.Parse(reader["BaseFGTS"].ToString()),
                    BaseIRRF = float.Parse(reader["BaseIRRF"].ToString())
                };

                TemObjeto.Pessoa = pessoa;
                var TemObjetoPessoa = new Pessoa()
                {
                    Nome = reader["Nome"].ToString(),
                    CPF = reader["CPF"].ToString()
                };
                TemObjeto.Pessoa.Nome = TemObjetoPessoa.Nome;
                TemObjeto.Pessoa.CPF = TemObjetoPessoa.CPF;

                TemObjeto.Pessoa.Funcionarios = func;
                var TemObjetoFunc = new Funcionario()
                {
                    Rg = reader["Rg"].ToString(),
                    ctps_serie = reader["ctps_serie"].ToString(),
                    CargaHo = reader["CargaHo"].ToString(),
                    DtAdm = reader["DtAdm"].ToString(),
                    IdCargo = reader["IdCargo"].ToString(),
                    Setor = reader["Setor"].ToString(),
                    Matricula = reader["Matricula"].ToString(),
                    Pis = reader["Pis"].ToString(),
                    Cbo = reader["Cbo"].ToString()
                };
                TemObjeto.Pessoa.Funcionarios.Rg = TemObjetoFunc.Rg;
                TemObjeto.Pessoa.Funcionarios.ctps_serie = TemObjetoFunc.ctps_serie;
                TemObjeto.Pessoa.Funcionarios.CargaHo = TemObjetoFunc.CargaHo;
                TemObjeto.Pessoa.Funcionarios.DtAdm = TemObjetoFunc.DtAdm;
                TemObjeto.Pessoa.Funcionarios.IdCargo = TemObjetoFunc.IdCargo;
                TemObjeto.Pessoa.Funcionarios.Setor = TemObjetoFunc.Setor;
                TemObjeto.Pessoa.Funcionarios.Matricula = TemObjetoFunc.Matricula;
                TemObjeto.Pessoa.Funcionarios.Pis = TemObjetoFunc.Pis;
                TemObjeto.Pessoa.Funcionarios.Cbo = TemObjetoFunc.Cbo;
                
                cc.Add(TemObjeto);
            }
            reader.Close();
            return cc;
        }
    }
}
